package com.shxzz.easy12306.framework.starter.idempotent.annotation;

import com.shxzz.easy12306.framework.starter.idempotent.enums.IdempotentKeyType;
import com.shxzz.easy12306.framework.starter.idempotent.enums.IdempotentScene;

import java.lang.annotation.*;

/**
 * 幂等注解
 * @author shxzz
 * @create 2024-02-22-21:21
 */
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Idempotent {

    /**
     * 幂等场景
     */
    IdempotentScene scene() default IdempotentScene.RESTAPI;

    /**
     * 幂等 key 类型
     */
    IdempotentKeyType type() default IdempotentKeyType.PARAM;

    /**
     * 幂等 key 前缀
     */
    String uniqueKeyPrefix() default "";

    /**
     * 触发幂等失败逻辑时的错误提示信息
     */
    String message() default "访问次数过多，请稍后访问";

    /**
     * SpEL 表达式，用于 key 类型为 {@link IdempotentKeyType#SPEL}
     */
    String spel() default "";

    /**
     * key 过期时间，用于 {@link IdempotentScene#MQ} 场景下消息状态过期时间设置
     */
    long keyTimout() default 3600L;
}
